Plotting in R

Maria Pachiadaki

11/16/2021

Explore different types of plots in ggplot2

ggplot2 BLURB

Required packages

Install the following packages: palmerpenguins

Dataset

We will use the palmerpenguins dataset. Data were collected and made available by Dr. Kristen Gorman and the Palmer Station, Antarctica LTER, a member of the Long Term Ecological Research Network.

We will briefly check the datastructure before we start plotting.

library(palmerpenguins)  # load palmerpenguins dataset
head(penguins)  #check table structure
# A tibble: 6 x 8
  species island bill_length_mm bill_depth_mm flipper_length_… body_mass_g sex  
  <fct>   <fct>           <dbl>         <dbl>            <int>       <int> <fct>
1 Adelie  Torge…           39.1          18.7              181        3750 male 
2 Adelie  Torge…           39.5          17.4              186        3800 fema…
3 Adelie  Torge…           40.3          18                195        3250 fema…
4 Adelie  Torge…           NA            NA                 NA          NA <NA> 
5 Adelie  Torge…           36.7          19.3              193        3450 fema…
6 Adelie  Torge…           39.3          20.6              190        3650 male 
# … with 1 more variable: year <int>
summary(penguins)  #summarize data
      species          island    bill_length_mm  bill_depth_mm  
 Adelie   :152   Biscoe   :168   Min.   :32.10   Min.   :13.10  
 Chinstrap: 68   Dream    :124   1st Qu.:39.23   1st Qu.:15.60  
 Gentoo   :124   Torgersen: 52   Median :44.45   Median :17.30  
                                 Mean   :43.92   Mean   :17.15  
                                 3rd Qu.:48.50   3rd Qu.:18.70  
                                 Max.   :59.60   Max.   :21.50  
                                 NA's   :2       NA's   :2      
 flipper_length_mm  body_mass_g       sex           year     
 Min.   :172.0     Min.   :2700   female:165   Min.   :2007  
 1st Qu.:190.0     1st Qu.:3550   male  :168   1st Qu.:2007  
 Median :197.0     Median :4050   NA's  : 11   Median :2008  
 Mean   :200.9     Mean   :4202                Mean   :2008  
 3rd Qu.:213.0     3rd Qu.:4750                3rd Qu.:2009  
 Max.   :231.0     Max.   :6300                Max.   :2009  
 NA's   :2         NA's   :2                                 

As we can see from the summary table three different species of penguins were recorded in three different islands.

Scatterplot

Let’s explore if there is a correlation between the body mass of the penguins and the flipper length

library(tidyverse)  # load the tidyverse package; contains ggplot2

ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g)) + geom_point()

Let’s add a tredline

ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g)) + geom_point() + geom_smooth(method = "lm")

Let’s add a trendline together with the equation

library(ggpubr)  #package the facilitates the display of the equation

ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g)) + geom_point() + geom_smooth(method = "lm") +
    stat_regline_equation(label.y = 6000, aes(label = ..eq.label..)) + stat_regline_equation(label.y = 5600,
    aes(label = ..rr.label..))

Are there any differences between the species?

# regression equations will overlap, we will use faceting for them
ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g, color = species)) +
    geom_point() + geom_smooth(method = "lm")

ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g, color = species)) +
    geom_point(aes(shape = sex))

Themes

Let’s try changing themes in other type of plot, histograms. Let’s plot the distribution of the flipper length for each species. We will use my favourite theme: them_bw()

https://r-charts.com/ggplot2/themes/

ggplot(penguins, aes(flipper_length_mm, fill = species)) + geom_histogram(alpha = 0.6,
    position = "identity") + theme_bw()

ggplot(penguins, aes(flipper_length_mm, fill = species)) + geom_histogram(alpha = 0.6,
    position = "identity") + theme_void()

Themes can be modified

Labels

ggplot(penguins, aes(flipper_length_mm, fill = species)) + geom_histogram(alpha = 0.6,
    position = "identity") + theme_bw() + labs(x = "Flipper length (mm)", y = "Counts") +
    theme(axis.title.x = element_text(color = "black", face = "bold", size = 14),
        axis.title.y = element_text(color = "black", face = "bold", size = 14))

Axis

# modify axis font size
ggplot(penguins, aes(flipper_length_mm, fill = species)) + geom_histogram(alpha = 0.6,
    position = "identity") + theme_bw() + labs(x = "Flipper length (mm)", y = "Counts") +
    theme(axis.text.x = element_text(color = "black", size = 12), axis.text.y = element_text(color = "black",
        size = 12), axis.title.x = element_text(color = "black", face = "bold", size = 14),
        axis.title.y = element_text(color = "black", face = "bold", size = 14))

Legends

ggplot(penguins, aes(flipper_length_mm, fill = species)) + geom_histogram(alpha = 0.6,
    position = "identity") + theme_bw() + labs(x = "Flipper length (mm)", y = "Counts",
    fill = "Species") + theme(axis.text.x = element_text(color = "black", size = 12),
    axis.text.y = element_text(color = "black", size = 12), axis.title.x = element_text(color = "black",
        face = "bold", size = 14), axis.title.y = element_text(color = "black", face = "bold",
        size = 14), legend.title = element_text(color = "black", face = "bold", size = 14),
    legend.text = element_text(size = 12))

## Barplot

Boxplots

ggplot(penguins, aes(x = species, y = flipper_length_mm, fill = sex)) + geom_boxplot() +
    theme_bw() + labs(x = "Species", y = "Flipper length (mm)") + theme(axis.text.x = element_text(color = "black",
    size = 12), axis.text.y = element_text(color = "black", size = 12), axis.title.x = element_text(color = "black",
    face = "bold", size = 14), axis.title.y = element_text(color = "black", face = "bold",
    size = 14))

ggplot(na.omit(penguins), aes(x = species, y = flipper_length_mm, fill = sex)) +
    geom_boxplot() + theme_bw() + labs(x = "Species", y = "Flipper length (mm)") +
    theme(axis.text.x = element_text(color = "black", size = 12), axis.text.y = element_text(color = "black",
        size = 12), axis.title.x = element_text(color = "black", face = "bold", size = 14),
        axis.title.y = element_text(color = "black", face = "bold", size = 14))

ggplot(na.omit(penguins), aes(x = species, y = flipper_length_mm, fill = sex)) +
    geom_boxplot() + geom_jitter(color = "black", size = 0.4, alpha = 0.9) + theme_bw() +
    labs(x = "Species", y = "Flipper length (mm)") + theme(axis.text.x = element_text(color = "black",
    size = 12), axis.text.y = element_text(color = "black", size = 12), axis.title.x = element_text(color = "black",
    face = "bold", size = 14), axis.title.y = element_text(color = "black", face = "bold",
    size = 14))

Violinplots

ggplot(na.omit(penguins), aes(x = species, y = flipper_length_mm, fill = sex)) +
    geom_violin() + theme_bw() + labs(x = "Species", y = "Flipper length (mm)") +
    theme(axis.text.x = element_text(color = "black", size = 12), axis.text.y = element_text(color = "black",
        size = 12), axis.title.x = element_text(color = "black", face = "bold", size = 14),
        axis.title.y = element_text(color = "black", face = "bold", size = 14))

ggplot(na.omit(penguins), aes(x = species, y = flipper_length_mm, fill = sex)) +
    geom_violin() + geom_boxplot(position = position_dodge(width = 0.9), width = 0.2) +
    theme_bw() + labs(x = "Species", y = "Flipper length (mm)") + theme(axis.text.x = element_text(color = "black",
    size = 12), axis.text.y = element_text(color = "black", size = 12), axis.title.x = element_text(color = "black",
    face = "bold", size = 14), axis.title.y = element_text(color = "black", face = "bold",
    size = 14))

Faceting

Colors

Plot interactively with plotly or dygraphs


install.packages("plotly")